package adv.np.pViaggianti.view.gwt.client.views;

import java.util.Date;
import java.util.Iterator;

import adv.np.pViaggianti.view.gwt.client.helpers.SmallQueue;

import com.google.gwt.i18n.client.DateTimeFormat;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.layout.VLayout;

/**
 * <p>
 * Il Pannello in cui viene visualizzato il log Lato-Client.
 * </p>
 * 
 * @author Giovanni Dall'Oglio Risso
 */
public class InfoPanel {
	
	/**
	 * Il pannello del LOG
	 */
	private static Canvas userInfoPanel = null;
	
	/**
	 * Il pannello in cui piazzare l'HTML dei messaggi
	 */
	private static HTMLFlow logArea = new HTMLFlow();
	
	/**
	 * La coda in cui piazzare i LOG
	 */
	private static SmallQueue<String> logsToDisplay
		= new SmallQueue<String>();
	
	/**
	 * Restituisce il pannello del LOG
	 * @return Il pannello del LOG
	 */
	public static Canvas getInfoPanel() {
		if (userInfoPanel == null)
			userInfoPanel = createInfoPanel();		
		return userInfoPanel;
	}
	
	
	private static Canvas createInfoPanel() {
		
		logArea.setOverflow(Overflow.AUTO);  
		logArea.setPadding(10);
        
		VLayout panel = new VLayout();  
		panel.setMembersMargin(10);  
		panel.setHeight("15%");
		panel.setMembers(logArea);
		
		return panel;
	}
	

	/**
	 * Aggiunge un messaggio al LOG (SENZA descrizione)
	 * @param message il messaggio da scrivere
	 */
	public static void AddToLog(String message) {
		AddToLog(message, null);
	}
	
	/**
	 * Aggiunge un messaggio al LOG (con descrizione)
	 * @param message il messaggio da scrivere
	 * @param description la sua descrizione
	 * 
	 */
	public static void AddToLog(String message, String description) {
		
		DateTimeFormat df = DateTimeFormat.getFormat("dd/MM/yyyy HH:mm:ss");
		
		String log = "<div><b>" +
		df.format(new Date()) +
		" - " + message + "</b></div>";
		
		if (description != null && description.length() > 0)
			log+= "<div>" + description+ "</div>";
			
		if (logsToDisplay.size() == 10)
			logsToDisplay.poll();
		
		logsToDisplay.put(log);

		
		String totLog = "";
		
		Iterator<String> it = logsToDisplay.iterator();
		
		while (it.hasNext())
			totLog = it.next() + totLog;
		
		logArea.setContents(totLog);
	}
	
}
